#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>


int main()
{
    printf("我是一个父进程我的pid:%d\n",getpid());
    
    //创建一个子进程！ 
    //bash也是用C语言写的，命令行启动的进程，都是bash的子进程，所以bash源代码中创建子进程也是用的fork
    //fork()->return 返回的本质是写入
    //id是父进程定义的变量，保存的是数据
    //返回的时候发生了写时拷贝，所以一个变量会有不同的值
    pid_t id = fork();
    
    //fork()之后，用if进行分流
    if(id<0) return 1; //进程创建失败
    else if(id == 0)
    {
        //子进程
        while(1)
        {
            printf("我是子进程,pid:%d,ppid%d,ret:%d,正在执行下载,&id:%p\n",getpid(),getppid(),id,&id);//这个函数在这里只调用一次
            sleep(1);//for test
        }
    }
    else 
    {
        //父进程 
        while(1)
        {
            printf("我是父进程,pid:%d,ppid%d,ret:%d,正在执行播放任务,&id:%p\n",getpid(),getppid(),id,&id);//这个函数在这里只调用一次
            sleep(1);//for test
        }
    }

    //fork之前只有父进程会执行fork之前的代码，fork之后父子进程都要执行后面的代码

    //while(1)
    //{
    //    printf("我是一个进程,pid:%d,ppid%d,fork return:%d\n",getpid(),getppid(),id);//这个函数在这里只调用一次
    //    sleep(1);//for test
    //}
    return 0;
}
